package com.tentcoo.util;

/**
 * 断言工具类。
 * 
 * @author Allenz
 * @since 0.0.3-SNAPSHOT
 * 
 */
public abstract class AssertUtils {

	/**
	 * 断言布尔表达式，当测试结果为<code>false</code>时抛出<code>IllegalArgumentException</code>
	 * 异常。
	 * 
	 * @param expression
	 *            布尔表达式
	 * @param message
	 *            断言失败时的异常信息
	 * @throws IllegalArgumentException
	 *             布尔表达式结果为<code>false</code>时抛出
	 */
	public static void isTrue(boolean expression, String message) {
		if (!expression) {
			throw new IllegalArgumentException(message);
		}
	}

	/**
	 * 断言布尔表达式，当测试结果为<code>false</code>时抛出包含默认信息的
	 * <code>IllegalArgumentException</code> 异常。
	 * 
	 * @param expression
	 *            布尔表达式 *
	 * @throws IllegalArgumentException
	 *             布尔表达式结果为<code>false</code>时抛出
	 */
	public static void isTrue(boolean expression) {
		isTrue(expression, "断言失败：表达式结果必须为真。");
	}

	/**
	 * 断言对象是否为<code>null</code>，当测试结果为<code>null</code>时抛出
	 * <code>IllegalArgumentException</code> 异常。
	 * 
	 * @param object
	 *            目标对象
	 * @param message
	 *            断言失败时的异常信息
	 * @throws IllegalArgumentException
	 *             对象为<code>null</code>时抛出
	 */
	public static void notNull(Object object, String message) {
		if (object == null) {
			throw new IllegalArgumentException(message);
		}
	}

	/**
	 * 断言对象是否为<code>null</code>，当测试结果为<code>null</code>时抛出包含默认信息的
	 * <code>IllegalArgumentException</code> 异常。
	 * 
	 * @param object
	 *            目标对象
	 * @throws IllegalArgumentException
	 *             对象为<code>null</code>时抛出
	 */
	public static void notNull(Object object) {
		notNull(object, "断言失败：对象必须不为null。");
	}
}
